package design_pattern.ThreadLocal;

import org.omg.CORBA.PUBLIC_MEMBER;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author: 蔡翔
 * @Date: 2019/11/11 13:53
 * @Version 1.0
 *
 * 如果不用线程保险箱， 就得用 hashMap的方式
 */
public class ThreadLocalSimulator<T> {
    //Map<K,V>
    private final Map<Thread,T> storage = new HashMap<>();

    public void set(T t){
        synchronized (this){
            //之所以 这里调用的是Thread.currentThread()是因为 它就是调用线程的 “线程”
            Thread key = Thread.currentThread();
            storage.put(key,t);
        }
    }

    public T get(){
        synchronized (this){
            //之所以 这里调用的是Thread.currentThread()是因为 它就是调用线程的 “线程”
            Thread key = Thread.currentThread();
            T t = storage.get(key);
            if(t==null){
                return initualValue();
            }
            return t;
        }
    }

    public T initualValue() {
        return null;
    }
}
